code: function(self) {
        var steps = Sysmo.makeArray(arguments),
            next = function() {
              var args = Sysmo.makeArray(arguments),
                  step = steps.shift();
        
              args.unshift(next);
              step.apply(self, args);
            };
        
        //an argument that is not a function is assumed to be the "this" context
        if (!/^function/i.test(self)) {
          steps.shift();
        } else {
          self = this;//next;
        }
        
        steps.length && next();
      }
docs: Allows you to chain multiple callbacks together. The first parameter for each callback is the "next" function that allows you to pass arguments to the next function. Pass each function that should be a part of the chain as a parameter to chain() function. NOTE* You can pass an object as the first parameter before a callback to use as "this" context when the callback is called