Hi,
I have no really nice way of doing what you want to achieve, but I noticed that:
ListPlot[{d, {\[EmptySet]}}]
plots fine. And so does
ListPlot[{d, {_, _}}]
I guess that this command
ListPlot[{d, {{}}} /. {{}} -> {\[EmptySet]}]
could be useful. If you do that Mathematica does draw legends:
ListPlot[{d, {\[EmptySet]}}, PlotLegends -> Automatic]

Unfortunately, I do not really understand what you mean by "I can't just strip out the empty lists, since their identity is important and corresponds to a legend.", and therefore am not sure whether this is useful at all.
Cheers,
Marco