docs: function (out) {
              // --------------------------------------------------- destructuring
  
              var cfg = this._cfg;
              var icon = cfg.icon;
              var tooltip = cfg.tooltip;
              var tabIndex = cfg.tabIndex;
              var waiAria = cfg.waiAria;
              var label = cfg.label;
              var role = cfg.role;
  
              var id = this._domId;
              var iconInfo = this._iconInfo;
              var extraAttributes = this.extraAttributes;
  
              // ------------------------------------------------------ processing
  
              var attributes = [];
  
              function addAttribute(key, value) {
                  value = '' + value;
                  value = ariaUtilsString.escapeForHTML(value, {attr: true});
                  attributes.push(key + '="' + value + '"');
  
                  attributes.push(subst('%1="%2"', key, value));
              }
  
              // delegationMarkup ------------------------------------------------
  
              var delegateManager = aria.utils.Delegate;
              var delegateId = this._delegateId;
  
              if (!delegateId) {
                  delegateId = delegateManager.add({
                      fn : this.delegate,
                      scope : this
                  });
                  this._delegateId = delegateId;
              }
  
              var delegationMarkup = delegateManager.getMarkup(delegateId);
  
              // icon ------------------------------------------------------------
  
              addAttribute('id', id);
  
  
              var style = null;
  
              if (!iconInfo.spriteURL && icon) {
                  var parts = icon.split(":");
                  var skinclass = parts[0];
                  var contentKey = parts[1];
  
                  var classes = aria.widgets.AriaSkinInterface.getSkinObject("Icon", skinclass, true).content[contentKey];
  
                  addAttribute('class', ['xWidget'].concat(classes).join(' '));
              } else {
                  addAttribute('class', this._getIconClasses(iconInfo));
                  if (tooltip != null && tooltip !== '') {
                      tooltip = addAttribute('title', tooltip);
                  }
                  attributes.push(delegationMarkup);
  
                  style = this._getIconStyle(iconInfo);
              }
  
              if (tabIndex != null) {
                  tabIndex = this._calculateTabIndex();
                  addAttribute('tabindex', tabIndex);
              }
  
              if (waiAria && label) {
                  addAttribute('aria-label', label);
              }
  
              if (waiAria && role) {
                  addAttribute('role', role);
              }
  
              if (style) {
                  addAttribute('style', style);
              }
  
              attributes.push(extraAttributes);
  
              attributes = attributes.join(' ');
              var markup = '<span ' + attributes + '></span>';
  
              // ---------------------------------------------------------- output
  
              out.write(markup);
          }