Inspired by (and code lifted from) mbostock's General Update Pattern III. This example looks very similar, but is a bit more complex in that it will work well with arbirtary strings, rather than those that are garenteed to have unique characters, like the example I worked off of. This is accomplished by determining the incidence of each character, as it appeared, and then using that incidence and character to be returned in a key function. This insured that characters didn't try to go the same spot, as the result of my first naive attempt.
Check out out the live example at bl.ocks