Theoretically you could try and setup 2 nodes that in geographically different locations to try and ensure they are not directly connected and then measure the time between one node broadcasting a transaction and the other node receiving it... but, as Danny pointed out, there will be no way to know exactly how many steps/nodes are between your 2 nodes. It could be 0, it could be 100.
If Bob has two nodes (Node "A" and Node "C") that are both connected to node "B" run by someone else, broadcasts the transaction from Node "A", and receives the transaction to Node "C" from Node "B", he will know the path of his transaction.
Bob could potentially expand his network of nodes to be larger than two nodes. If Bob has many nodes, he could follow the path of propagation as long as there is exactly one hop between each node not controlled by him to another node controlled by him. He can also measure the exact time each of his nodes receive his transaction to get an idea as to how quickly his transaction is propagating.
I would also point out two things:
1- Nodes typically connect to a geographically diverse set of nodes. If I have a node in North Carolina connected to nodes in California, France, Illinois, New York, and Mexico City, if I broadcast a transaction, it may take longer to get to South Carolina than to California, even though South Carolina is geographically much closer.
2 - The time it takes a transaction to propagate throughout the network is very small compared to the time it takes for a transaction to get one confirmation. There is an approximately 0.1664% chance a block will be found at any given second, and I don't think it typically takes more than a second or two for most transactions to fully propagate. So in general, a transaction will have been fully propagated for a long time before it is confirmed.