In the simplest case, the function implemented by the node is a sequential function. Then, there is a tree whose nodes are labeled with the input variables that should be followed for reading the inputs until enough inputs are there to fire the node. The inputs that are not needed are replaced with some dummy values since they don't matter. This way, we produce values for all outputs, but remove the outputs that should be not present afterwards.
For endochronous functions that are not sequential the implementation is more individual and depends on the particular function. Since it is endochronous, there is however a way how to read the inputs and how to decide whether there are enough inputs there to fire an action.