ICMP packets pretty much always carry some data (even though it's not _strictly_ required). This data is what is padded when the user asks for a ping with a specific packet size (e.g., when debugging MTU issues).
In some applications, using an ICMP payload and getting a quote of the IP header + 8-bytes of the original packet back in ICMP error messages is part of the application. For example, traceroute utilises the fact that it gets part of the payload back in a ICMP TTL exceeded message to identify _which_ traceroute request was being responded to.
you're right it's not continuous, you'd have to send another ping once the first one is finished. Your data is only "stored in the network" until the ping completes which would be a few hundred ms or so and then another ping has to be sent. If a single ping fails i wonder if the whole "fs" is corrupted or if there some kind of error handling built in.