You just need to iterate the pipe inside the transform:
gremlin>
g.V.as('start').transform{s->x=[];
s.as('a').out.aggregate(x).out.loop(1){true}{true}.retain(x).as('b').select{
it.name}.toList()}.as('dependencies').select{
it.name}{it}
==>[start:bob, dependencies:[]]
==>[start:a, dependencies:[]]
==>[start:a, dependencies:[]]
==>[start:bar, dependencies:[]]
==>[start:baz, dependencies:[]]
==>[start:a, dependencies:[]]
==>[start:a, dependencies:[]]
==>[start:a, dependencies:[]]
==>[start:bert, dependencies:[]]
==>[start:a, dependencies:[[a:a, b:ben]]]
==>[start:a, dependencies:[]]
==>[start:ben, dependencies:[]]
==>[start:a, dependencies:[]]
==>[start:a, dependencies:[]]
==>[start:mike, dependencies:[]]
==>[start:a, dependencies:[]]
==>[start:a, dependencies:[]]
==>[start:a, dependencies:[[a:a, b:a]]]
==>[start:a, dependencies:[[a:a, b:jim], [a:a, b:noodle], [a:a,
b:jim], [a:a, b:noodle], [a:a, b:jim], [a:a, b:foo], [a:a, b:a], [a:a,
b:noodle], [a:a, b:noodle], [a:a, b:jim], [a:a, b:jim]]]
==>[start:jim, dependencies:[]]
==>[start:foo, dependencies:[[a:foo, b:bar]]]
==>[start:a, dependencies:[]]
==>[start:noodle, dependencies:[[a:noodle, b:ben]]]
==>[start:a, dependencies:[]]
you may want to tweak that a bit depending on your result needs, but
note that I just added a toList() within the transform operation to
iterate the pipe.
Stephen