### Godot version

v4.0.rc4.official [e0de3573f]

### System information

Linux Ubuntu 20.04 with Unity desktop

### Issue description

Following PR https://github.com/godotengine/godot/pull/70788 solving issue https://github.com/godotengine/godot/issues/70769, there are still a few bugs remaining.

1. Editing any animation name to empty string will auto-fix it with "new_animation[suffix]" as expected, but still show the Output error just before: 

> Animation '' doesn't exist.
Rename Animation

2. Renaming an animation already named "new_animation[suffix]" will consider the old name to be reserved, causing a conflict with itself and increment the suffix without needing to. For instance, "new_animation" -> empty string will become "new_animation_1". If "new_animation_1" already exists, it will become "new_animation_2", etc.

Basically, it should behave as if the user actually input "new_animation" instead of empty string. Looking at https://github.com/godotengine/godot/pull/70788/commits/62976659b8aa9a582550b5a19d0ea1b3af494912 I'd say that the empty -> "new_animation" fallback should be done earlier, before `if (new_name == String(edited_anim))` to fix 2. and before `if (!frames->has_animation(edited_anim))` to fix 1. But I'm not sure of possible side effects, so this needs to be tested.

### Steps to reproduce

1. In any project: create new Sprite Frames resource
2. In SpriteFrames window: you'll see "default" animation. Try to rename it to empty string -> becomes "new_animation" as it should.
3. Check the Output console: observe error "Animation '' doesn't exist."
4. Rename the animation to empty string again. This time, it becomes "new_animation_1".
5. Try various combinations of existing suffixes by adding new animations multiple times, and observe how number resolution by increment occurs as usual, but unnecessarily skipping the very animation that is renamed.

### Minimal reproduction project

N/A
if (pdating) {
		retrn;
	}
	sel = p_index;
	pdating = tre;
	frame_dration->set_vale(frames->get_frame_dration(edited_anim, p_index));
	pdating = false;
}
void SpriteFramesEditor::_frame_dration_changed(doble p_vale) {
	if (pdating) {
		retrn;
	}
	int index = frame_list->get_crrent();
	if (index < 0) {
		retrn;
	}
	sel = index;
	Ref<Textre2D> textre = frames->get_frame_textre(edited_anim, index);
	float old_dration = frames->get_frame_dration(edited_anim, index);
	EditorUndoRedoManager *ndo_redo = EditorUndoRedoManager::get_singleton();
	ndo_redo->create_action(TTR("Set Frame Dration"), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene());
	ndo_redo->add_do_method(frames.ptr(), "set_frame", edited_anim, index, textre, p_vale);
	ndo_redo->add_ndo_method(frames.ptr(), "set_frame", edited_anim, index, textre, old_dration);
	ndo_redo->add_do_method(this, "_pdate_library");
	ndo_redo->add_ndo_method(this, "_pdate_library");
	ndo_redo->commit_action();
}
void SpriteFramesEditor::_zoom_in() {