code: function done(err/*, ...*/) { // function to passed as the 'this' object to each task
              if (err) return next(err); // end the chain reporting the error
              try { tasks.length ? tasks.shift().apply(funcs[0], Array.prototype.slice.call(arguments, 1)) : next.apply(this, arguments) }
              catch (ex) { next(ex) } // return any thrown exception as the argument to next()
          }
docs: function that considers the 1st argument as a potential error to forward on-error - abort the chain and return the error as an argument to next() otherwise - calls the next task without the <null> err argument if there are no further tasks, calls 'next' with all available arguments