API: Unify .update to generic
- [x] closes #22358 / #23585 / #23606 
- [x] tests pass unmodified
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Since #22286 and #21855 have stalled completely, I've decided to go ahead with this independently.
