We have an outstanding bug open whereby child themes don't inherit new theme settings that are added to a parent, but aside from that, child themes should pretty much work as you describe, including custom CSS.
When we build multi-brand themes in-house, we tend to add the 'master' brand styles to custom.css, then don't edit that in the child theme at all - let it inherit so that it's always up to date. If there are any styles used that we actually want to be branded, we use CSS variables for those. Then create separate CSS files in the child themes that have any styles specific to that brand, and also set our brand-specific CSS variable values.
So something like
/* custom.css in parent theme */
.someTitle {
font-family: ...;
font-size: 30px;
color: var(--branded-title, #000);
}
/* sub.css in a child theme */
:root {
--branded-title: #ff0000;
}