function toAbsId (childId, checkPlugins) {
				var absId, parts, plugin;

				absId = core.toAbsId(childId, def.id, cfg);
				if (!checkPlugins) return absId;

				parts = pluginParts(absId);
				if (!parts.pluginId) return absId;

				plugin = cache[parts.pluginId];
				// check if plugin supports the normalize method
				if ('normalize' in plugin) {
					// note: dojo/has may return falsey values (0, actually)
					parts.resourceId = plugin['normalize'](parts.resourceId, toAbsId, def.config) || '';
				}
				else {
					parts.resourceId = toAbsId(parts.resourceId);
				}
				return parts.pluginId + '!' + parts.resourceId;
			}
* reduceLeadingDots of id against parentId
		- if there are too many dots (path goes beyond parent), it's a url
			- return reduceLeadingDots of id against baseUrl + parentId;
	* if id is a url (starts with dots or slash or protocol)
		- pathInfo = { config: userCfg, url: url }
	* if not a url, id-to-id transform here.
		- main module expansion
		- plugin prefix expansion
		- coordinate main module expansion with plugin expansion
			- main module expansion happens first
		- future: other transforms?
@param id
@param parentId
@param cfg
@return {*}