docs: function (container, property, callback, throwError, recursive) {
  
                  // backward compatibility support -> new parameter has been introduced after container.
                  if (typeUtils.isObject(property)) {
                      return this.addListener(container, null, property, callback, throwError);
                  }
  
                  // choose the appropriate meta name depending on the type
                  var meta = __getListenerMetaName(property, recursive);
                  if (!__isValidContainer(container)) {
                      if (throwError) {
                          throw {
                              code : this.NOT_OF_SPECIFIED_DH_TYPE
                          };
                      } else {
                          this.$logError(this.NOT_OF_SPECIFIED_DH_TYPE, null, container);
                      }
                      return;
                  }
  
                  if (!container[meta]) {
                      container[meta] = [callback];
                  } else {
                      // check if not already in the list
                      var listeners = container[meta];
                      if (arrayUtils.indexOf(listeners, callback) > -1) {
                          return; // already in the array
                      }
                      listeners.push(callback);
                  }
                  if (recursive) {
                      this.__checkBackRefs(container);
                  }
              }