Hmmm... A sensor is supposed to create lag, so here comes a low lag solution without listener to rez an object if an AV comes within range.
The script for the rezzer:
-------------------------------------------------------------------------
integer isREZZED = FALSE;
key ObjectKey = "";
default
{
state_entry()
{
llSensorRepeat("", NULL_KEY, AGENT, 4.0, PI, 5);
}
sensor(integer total_number)
{
if (!isREZZED)
{
llRezObject(llGetInventoryName(INVENTORY_OBJECT, 0), llGetPos(),ZERO_VECTOR,ZERO_ROTATION,0);
isREZZED = TRUE;
}
}
no_sensor()
{
if (ObjectKey != ""

{
llGiveInventoy(ObjectKey, llGetInventoryName(INVENTORY_OBJECT, 0));
ObjectKey = "";
}
isREZZED = FALSE;
}
object_rez(key id)
{
ObjectKey = id;
isREZZED = TRUE;
}
}
-------------------------------------------------------------------------
And in the rezzed object:
-------------------------------------------------------------------------
default
{
changed(integer change)
{
if (change & CHANGED_INVENTORY)
{
if (llGetInventoryType(llGetObjectName()) == INVENTORY_OBJECT)
{
llDie();
}
}
}
}
-------------------------------------------------------------------------
In words: The rezzer script must know if the object is already rezzed. It also stores the key of the rezzed object so, when it's time to clear the place, it gives a copy of the object to the rezzed object. And when the rezzed object realizes what it has in its belly, it explodes... sort of...

ETA: The OP deleted his question... So I delete every mention to him.