docs: function (htmlElem, properties, cfg) {
                  var elem = this._getHTMLElement(htmlElem), endProps = {};
                  var props = (properties == null) ? [] : ariaUtilsArray.clone(properties);
                  if (elem == null) {
                      this.$logWarn(this.INVALID_HTML_ELEMENT);
                      return null;
                  }
                  if (aria.utils.Dom.getStyle(elem, "display") != "none") {
                      this.$logWarn(this.INVALID_HTML_ELEMENT);
                      return null;
                  }
  
                  var oldValues = elem.ATEffects || {};
                  var display = oldValues.display;
                  delete oldValues.display;
  
                  if (props && props.length > 0) {
                      for (var prop in oldValues) {
                          var ix = ariaUtilsArray.indexOf(props, prop);
                          if (ix != -1) {
                              endProps[prop] = oldValues[prop].fullValue;
                              props.splice(ix, 0);
                          } else {
                              this._setProperty(elem, {
                                  prop : prop,
                                  unit : oldValues[prop].unit
                              }, oldValues[prop].value);
                          }
                      }
                      for (var i = 0, l = props.length; i < l; i++) {
                          endProps[props[i]] = this._getProperty(elem, props[i]);
                          this._setProperty(elem, {
                              prop : props[i]
                          }, 0);
                      }
                  } else {
                      endProps.opacity = (oldValues.opacity)? oldValues.opacity.fullValue : 1;
                  }
  
                  elem.style.display = display || "block";
  
                  return this.animate(elem, endProps, cfg);
              }