The upside down T sounded interesting, which is basically a path that has branches. Here's what I came up with. Defining the paths is pretty tedious since you have to place a list of the uids of all the connected nodes in each node, but the events are fairly simple albeit dense.
dropbox.com/s/maef5spnv5olc07/path_follow_2.capx
The motion is driven by the the input angle. If the object is between nodes the object will move forward or backwards depending if the input direction is pointing more in one way or another. Also when a node is hit it will look at all the connecting nodes and pick the one with the lowest anglediff with the input angle to move towards.
The events a mostly easy enough to follow I think. The exception is probably the formula in event 13:
obj: add (cos(inputDir-self.ang)>0?1:-1)*speed*dt to d
inputDir is the angle from the keyboard input
self.ang is the angle between the current pair of nodes.
cos(inputDir-self.ang) is the dot product between two unit vectors made from those angles. It just simplifies to that. If the dot product is positive then the inputDir is mostly in the same direction as the angle between the nodes. And if it's negative then it should go backwards.
The conditional ...cos(inputDir-self.ang)>0?1:-1 is to make it only positive or negative 1. That is to keep the speed constant.
The remainder is to apply the speed in that direction with dt.