Wes,
Simplifying the problem to just two nodes and one link, one approach to creating a 'pulse' across that link could be to use the 'bilinks' concept from Mike's Curved Links example here:
Upon inspection, a force directed graph has a link whose DOM element looks like this:
<line class="link" x1="404.52570668054443" y1="373.7792866810728" x2="442.9147549677033" y2="317.54965460182785" style="stroke-width: 1px;"></line>
However, in the curved links example, from the 'bilinks' variable D3 creates this DOM element:
<path class="link" d="M477.2230581370574,286.5001820255783S444.30420653429763,319.2468905008609 409.5105774561883,331.38266511478247"></path>
The difference here is the use of the SVG path element, which in this case is calculated using Bezier. Here is a great description of Bezier curves:
Unfortunately, D3 provides one path DOM element and doesn't make any intermediate bilinks selectable, which would allow us to change their css and put on timers.
We could use path transitions to show a sine curve propagating through the line, similar to
this example, but that's a bit of a hack.
Alternatively, we could calculate entirely separate set of invisible nodes that permanently lie between the visible ones, but that introduces additional problems of ensuring those nodes update with each 'tick' properly as the visible nodes move around.
Here is an example of
"Transitions Along a Path". In our case we would have to create some object, then transition it along the path, then destroy it on the other end. I think this last approach may work, playing with it now.
Sean