By putting it in a Depencency Graph (link needed), when run is called, all
functions are executed as soon as possible. When all dependencies for a node
have been fulfilled, the graph executes that node (in parrallel). When a node
has nothing to point to it is considered an end of the graph and the value is
collected for the done callback.

By just declaring dependencies for the callbacks you request scope where needed
and the graph figures it out.