docs: function (fn, context) {
              var args = [];
              for (var i = 2; i < arguments.length; i++) {
                  args.push(arguments[i]);
              }
              return function () {
                  // need to make a copy each time
                  var finalArgs = args.slice(0);
                  // concat won't work, as arguments is a special array
                  for (var i = 0; i < arguments.length; i++) {
                      finalArgs.push(arguments[i]);
                  }
                  return fn.apply(context, finalArgs);
              };
          }