docs: function(urls, callback, opts, check) {
  		var defOpts = {
  				dataType : 'script',
  				cache    : true
  			},
  			success, cnt, scripts = {}, results = {};
  		
  		opts = opts || {};
  		if (opts.tryRequire && this.hasRequire) {
  			require(urls, callback, opts.error);
  		} else {
  			success = function() {
  				var cnt, fi, hasError;
  				$.each(results, function(i, status) {
  					if (status !== 'success' && status !== 'notmodified') {
  						hasError = true;
  						return false;
  					}
  				});
  				if (!hasError) {
  					if ($.isFunction(callback)) {
  						if (check) {
  							if (typeof check.obj[check.name] === 'undefined') {
  								cnt = check.timeout? (check.timeout / 10) : 1;
  								fi = setInterval(function() {
  									if (--cnt < 0 || typeof check.obj[check.name] !== 'undefined') {
  										clearInterval(fi);
  										callback();
  									}
  								}, 10);
  							} else {
  								callback();
  							}
  						} else {
  							callback();
  						}
  					}
  				} else {
  					if (opts.error && $.isFunction(opts.error)) {
  						opts.error({ loadResults: results });
  					}
  				}
  			};
  
  			if (opts.loadType === 'tag') {
  				$('head > script').each(function() {
  					scripts[this.src] = this;
  				});
  				cnt = urls.length;
  				$.each(urls, function(i, url) {
  					var done = false,
  						script;
  					
  					if (scripts[url]) {
  						results[i] = scripts[url]._error || 'success';
  						(--cnt < 1) && success();
  					} else {
  						script = document.createElement('script');
  						script.charset = opts.charset || 'UTF-8';
  						$('head').append(script);
  						script.onload = script.onreadystatechange = function() {
  							if ( !done && (!this.readyState ||
  									this.readyState === 'loaded' || this.readyState === 'complete') ) {
  								done = true;
  								results[i] = 'success';
  								(--cnt < 1) && success();
  							}
  						};
  						script.onerror = function(err) {
  							results[i] = script._error = (err && err.type)? err.type : 'error';
  							(--cnt < 1) && success();
  						};
  						script.src = url;
  					}
  				});
  			} else {
  				opts = $.isPlainObject(opts)? Object.assign(defOpts, opts) : defOpts;
  				cnt = 0;
  				(function appendScript(d, status) {
  					if (d !== void(0)) {
  						results[cnt++] = status;
  					}
  					if (urls.length) {
  						$.ajax(Object.assign({}, opts, {
  							url: urls.shift(),
  							success: appendScript,
  							error: appendScript
  						}));
  					} else {
  						success();
  					}
  				})();
  			}
  		}
  		return this;
  	}