I'm not sure about step, but caolan's async is perfectly usable in the browser, as well as in node.
That said, code sharing between browser and server often extends to templating, validation and a few utilities, in my experience. More complex logic is better served with message passing or something like dnode.
The callback issue means that client and server are really not running the same language. They sorta look the same I guess.