This also fixes an edge case where optional objects could have required properties, but this was not present in type requirements on the defaults. Added a test to show behavior here merging deep optionals