docs: function (event, avoidCallback) {
              if (!this._hasFocus) {
                  return;
              }
              if (!this._keepFocus) {
                  var cfg = this._cfg; // , htc = this._skinObj.helpText;
                  this._hasFocus = false;
                  // reinitialize for next time (autoselect feature)
                  this._firstFocus = true;
                  if (cfg.readOnly) {
                      return;
                  }
  
                  this.checkValue({
                      "eventName" : "blur"
                  });
                  // checkvalue might trigger an onchange that disposes the widget, check again this._cfg
                  cfg = this._cfg;
                  if (!cfg) {
                      return;
                  }
  
                  if (cfg.prefill) {
                      this.setPrefillText(true, cfg.prefill, false);
                  } else {
                      this.setHelpText(true);
  
                  }
  
                  this._updateState();
  
                  if (cfg.formatError && cfg.validationEvent === 'onBlur') {
                      // show errortip on blur used for debug purposes
                      this._validationPopupShow();
                  } else {
                      // dispose of error tip
                      this._validationPopupHide();
                      if (cfg.directOnBlurValidation) {
                          if (cfg.bind) {
                              var bind = cfg.bind.value;
                              if (bind) {
                                  var dataholder = bind.inside;
                                  var name = bind.to;
                                  var groups = cfg.validationGroups;
                                  ariaUtilsData.validateValue(dataholder, name, null, groups, 'onblur');
                                  // PTR05705466: validateValue could have triggered widget dispose, need to re-check
                                  // this._cfg before continuing
                                  if (!this._cfg) {
                                      return;
                                  }
                              }
                          }
                      }
                  }
  
              } else {
                  this._currentCaretPosition = this.getCaretPosition();
                  // this._hasFocus = false must be after the call of this.getCaretPosition()
                  this._hasFocus = false;
              }
              if (this._cfg.onblur && !avoidCallback) {
                  this.evalCallback(this._cfg.onblur);
              }
          }