1) It would probably be better to unset the field rather than set it to NULL.
2) In views, you can rearrange the fields you've selected, but also delete them. MerlinofChaos has got this figured out. I suggest looking at his code for inspiration. I won't have time myself for a couple of weeks.
I've solved this in probably a very unsexy manner, but it works.
I've got a multiple field in a content type called TYPE. The field is called 'field_extrafield' and is a term reference field in my case.
Create a module called HOOK with this function:
function HOOK_node_validate($node, $form, &$form_state) {
if ($node->form_id == 'TYPE_node_form') {
foreach ($node->field_extrafield['und'] as $mkey => $mvalue) {
if (is_array($mvalue)) {
if (!isset($mvalue['tid'])) {
form_set_value($form['field_extrafield']['und'][$mkey], NULL, $form_state);
}
}
}
}
}
This might not work out of the box. Mu case inparticular involves field collections so the arrays look different, but this should get you going.
This function add custom validation to the form after it is submitted. The first IF assures you you're working on the correct form. Then we're checking if a value has been set in the multiple field. The fields will be listed as numbered arrays under ['field_name']['und'], but there will also be string items here, so you need to check that you're working on items that are arrays (is_array). Since this is a term ref in my case, I'm checking to see if the array under ['und'] has the ['tid'] set. If not, I set the whole array to NULL using the form_set_value function. This is the only way to write changes to the form inside the validation function.
This feels like a very brutal way of doing it... setting fields to NULL in the validation form... any other suggestions?