docs: function add() {
              if (list) {
                  // First, we save the current length
                  var start = list.length;
                  (function add(args) {
                      var doEach = function doEach(arg) {
                          var type = checkType(arg);
                          if (type === "function") {
                              if (!options.unique || !self.has(arg)) {
                                  list.push(arg);
                              }
                          } else if (arg && arg.length && type !== "string") {
                              // Inspect recursively
                              add(arg);
                          }
                      };
                      if (Array.isArray(args)) {
                          args.forEach(doEach);
                      } else {
                          for (var k in args) {
                              doEach(args[k]);
                          }
                      }
                  })(arguments);
                  // Do we need to add the callbacks to the
                  // current firing batch?
                  if (firing) {
                      firingLength = list.length;
                      // With memory, if we're not firing then
                      // we should call right away
                  } else if (memory) {
                          firingStart = start;
                          fire(memory);
                      }
              }
              return this;
          }