When importing data into a field, sometimes you want to edit one or more existing values, or replace all existing values. eg. when you have a URL for a CCK Link field, you may either want to import it and leave the 'title' subfield alone or assume a new URL means the title must change, regardless of whether you have another value to replace it or not. A more complex example would be Location fields.
It seems to me that more convenient than asking module developers to climb down the field tree themselves, deleting any values they find as they go, plugins should define what an "empty" field should look like. This will help in instances like CCK fields where an "empty" field isn't just an empty array, but (more or less) a single value array where each item is an array with no values.
We could even try to provide sensible fallback values; if a module calls fieldtool_delete() on a field with no defined empty value, and if it's an array, we set it to an empty array; if a string, to an empty string, and so on.
This would replace the method implemented here with something a little more explicit.