Drag a node around. Notice how you cannot force the dragged node to overlap any other (stationary) node. If you drag more than one node, notice how the relative positions of the dragged nodes are maintained except when forced to be shifted in order to avoid overlapping other nodes.

This functionality is implemented by a custom Part.dragComputation property function, which affects how the DraggingTool can move selected nodes. You will want to adjust how it finds an empty spot for the dragged node when dragging from another Diagram.

GoJS Features in this sample