I added one more function for VIObject to be able to delete self when object is destroyed. Since I didn't find a corresponding function for this. The function I added does the following:
var _ind = ds_list_find_index(systemReference.objectList, self);
ds_list_delete(systemReference.objectList, _ind);
Did I do it right? Everything works fine for me!