Some internet sources say dd conv=sparse will produce a sparse image, i.e. one leaving out the empty parts.
Otherwise the tools dd_rescue and ddrescue (which are different things) can do it. But of course they are not readily available on SFOS.