Here is a technique you can consider avoiding the need to create a custom node form. There may be some taste questions that you may need for a further search in order to get exactly what you want.
The advantage of this method, using HTML-like labels , is that changing the space inside and outside the rectangle becomes a simple matter by changing the internal number of points (here 4) and the external number of points (here 16) respectively.
digraph { node [shape=none] O [label=< <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="16" CELLPADDING="4"> <TR><TD WIDTH="70">\N</TD></TR> </TABLE> >] {a,b,c,d} -> O }
Result:

You can change the BORDER and CELLBORDER parameters to show or hide the rectangles. You can adjust their thickness, but only in multiples of 1 point. I used the WIDTH parameter to force the width to height ratio, which causes the alignment of all arrow tips. Otherwise, some of the tips will correspond to the sides of the invisible outer rectangle.
source share