Malleys,
А в чем смысл Вашей обертки? Если бы вы написали вот так
function define(name, object) {
object.name = name;
window[name] = object;
// return object; -- это тоже, кстати, не нужно
}
define('stone', ["rubin", "almaz", "izumrud", "sapfir"]);
define('apple', ["green", "red", "bad"]);
define('error', ["text", "number", "img"]);
define('arr', ["", stone, apple, error]);
alert(arr[1].name);
Что от этого бы изменилось?