I think empty skins benefits uniformity in the data.
If you had a set of different enemies with rank0, rank1, rank2, and some types of enemies had an empty rank0 skin and some enemies had rank0 with stuff in it, the code would have to handle the absence of the rank0 in some because they weren't included in the json.
Though I suppose SkeletonData.findSkin does return a null you could check.
Would it be of some benefit if the game somehow had that empty skin to edit?
Theoretically, a game could have a semantic rank0 that changes its look.
That when some condition is fulfilled, some rank0 skins, instead of being empty, would have something in it, so it gets modified/added to at runtime.
But I guess it is also not terribly difficult to just create and add the skin to the SkeletonData at runtime when findSkin returns null.
But then you'd have to call SetSkin to all existing instances of that skeleton you added the skin to. Though you'd have to call setSlotsToSetupPose either way. I guess the empty rank0 could just be created on initialization of the skeleton data if this was needed.
Still, extra code and mysterious disappearing data. Better leave a note somewhere this if auto-removal of empty skins is going to be a feature.