code: function Step() {
  
    var actions = Array.prototype.slice.call(arguments);
    var queue;
  
    function _Step() {}
  
    function next(method) {
      if (queue.length === 0) {
        _Step.finish();
        return;
      }
      var a = queue.pop();
      if (a.on) {
        a.on('finish.chain', function() {
          a.on('finish.chain', null);
          next(method);
        });
      }
      if (!a[method] || !a[method]()) {
        next(method);
        if(a.on) a.on('finish.chain', null);
      }
    }
  
    _Step.enter = function() {
      // call enter on each action
      queue = actions.slice().reverse();
      next('enter');
      return true;
    }
  
    _Step.exit = function() {
      // call exit on each action
      queue = actions.slice();
      next('exit');
      return true;
    }
  
    _Step.clear = function() {
      for(var i = 0, len = actions.length; i < len; ++i) {
        var a = actions[i];
        a.clear && a.clear();
      }
    }
  
    _Step = Action(_Step);
    return _Step;
  }
docs: / executes actions serially, waits until the previous task is completed to start with the second and so on usage: Step(action1, action2, action3)  raises finish when all the tasks has been completed