I'm OK with the first approach because it's simpler. 

I'd lean against keeping 'next' - esp for weight, as we are doing more spec-based validation as the specs become better defined & we are moving towards ensuring that integer fields are is_numeric @ the BAO level.

If it had been documented in _spec or there was a test for it I would say we should keep it but as is I'd rather ditch it. 

We could add into the BAO that if weight is set but not numeric we also set it to the next available weight.