Greetings.
Generally it is relatively difficult to give help and advice when you don't supply neither log-report nor relevant parts of the code, but I will do my best!
The first method you use appear to me as if it would work fine, then again It's difficult to know when you don't supply the function at hand, but if they were to be siblings of the big enemy one could write something along these lines:
func die():
var siblings = get_parent().get_children()#get all siblings
for sibling in siblings:#iterate over all siblings
if sibling !=self&&sibling.has_method("die"):#aka if it is an enemy but not and thus can die, and it has not found itself
sibling.queue_free()
queue_free()#make sure to queue_free oneself last, don't know it is necessary per say to delete oneself last, but oh well
That would be the solution closest to the one you've got, another is to use Godot's built-in group system, something like this:
#for all the enemies that you want to die at the same time
func _ready():
add_to_group("enemy_group_1")
#only in your big enemy script
func die():
var enemies = get_tree().get_nodes_in_group("enemy_group_1")
for enemy in enemies:
enemy.queue_free()