code: function unsubscribe(name, id, callback) {
          if (typeof name !== s_string) {
              throw new TypeError('topic name must be a string.');
          }
          if (id === undefined || id === null) {
              if (typeof callback === s_function) {
                  id = callback;
              }
              else {
                  delete _topics[name];
                  return;
              }
          }
          if (typeof id === s_function) {
              callback = id;
              id = null;
          }
          if (id === null) {
              if (_id === null) {
                  if (_topics[name]) {
                      var topics = _topics[name];
                      for (id in topics) {
                          delTopic(topics, id, callback);
                      }
                  }
              }
              else {
                  _id.then(function(id) {
                      unsubscribe(name, id, callback);
                  });
              }
          }
          else if (Future.isPromise(id)) {
              id.then(function(id) {
                  unsubscribe(name, id, callback);
              });
          }
          else {
              delTopic(_topics[name], id, callback);
          }
          if (isObjectEmpty(_topics[name])) {
              delete _topics[name];
          }
      }
docs: unsubscribe(name) unsubscribe(name, callback) unsubscribe(name, id) unsubscribe(name, id, callback)