I would like to ask if it is possible to set only the y position of the purple guide nodes to y=0 without specifying the x position such that the nodes will arrange themselves at the most suitable position at y=0 for edges to point upwards and end at the top boundary of the graph like the yellow edges in the third picture.
I am currently using neato and the positions of all the nodes (including the red rectangular nodes) excluding the purple point nodes are fixed, but the graph does not arrange nodes at the top despite using cluster and group as seen in the first and second picture.
neato does not do any useful node positioning in the -n mode
neato does not do clusters correctly.
it does not use clusters to position nodes, it just draws a rectangle around the nodes in a cluster
it does not include any margin when it draws the rectangle
My intuition is that dot would be the best engine to start with. Your graphs show (to me) obvious ranking (rows). And then follow that with python, gvpr, or C (or language of your choice) to adjust the dot output. (I remember you want top-alignment of you nodes. pretty easy with post-processing).
if you try using dot or osage, you can add your own attributes to the objects (e.g. node22 [shape=rect type=midsized team=bears]. The Graphviz engines will ignore these added attributes, but will pass them on to your clean-up code.
[Second attempt to produce a helpful answer. ]
How to get the purple nodes added, well positioned, and connected by well-drawn edges:
start over with dot or osage! A lot of work, but maybe worth it if you are going for a repeatable result.
create a second dot graph, just containing the purple nodes. Then try using gvpack to glue the two together. This might work. If so, it might go pretty easily. (or maybe not). If it does work, it might be a method of building the entire graph from multiple slices. Edges might be a killer problem. (lots of might here)
write a gvpr or python post-processor to add & position the purple nodes and then let neato -n or neato -n2 do the edge routing. If you added your own pseudo attributes to the red nodes, this scheme would probably be fairly easy. (maybe)