docs: function (container, property, callback, recursive) {
  
                  // backward compatibility support -> new parameter has been introduced after container.
                  if (typeUtils.isObject(property)) {
                      return this.removeListener(container, null, property, callback);
                  }
  
                  // choose the appropriate meta name depending on the type
                  var meta = __getListenerMetaName(property, recursive);
                  if (!container || container[meta] == null) {
                      return;
                  }
                  // retrieve meta object, and index of callback in this container
                  var listeners = container[meta], idx = arrayUtils.indexOf(listeners, callback);
                  if (idx > -1) {
                      if (listeners.length == 1) {
                          container[meta] = null;
                          delete container[meta];
                          __checkAndRemoveBackRefs(container);
                      } else {
                          listeners.splice(idx, 1);
                      }
                  }
              }