Well, the idea is to assign the reference variable inside the procedure, like:

procedure ReleaseObj(var Obj:TObject);
begin
Obj.Free; // but i can't use Free() all the time
Obj := nil;
end;

I suppose there should be a compiler switch or directive to avoid the explicit typecast... is there any? :?