Edit: obviously the documentation is wrong. Dawn is doing it different. See more details further down.
Hi Liam,
that’s interesting. I also looked into the documentation, which tells the same as you, as expected.
But when I change the template/product.json to “settings”: I get following error message:
$ shopify theme dev --theme-editor-sync -e xyz
...
The local file templates/product.json is different from the remote version in the development theme.
? What would you like to do? (You chose: Keep the local version)
100%
• 17:31:18 ERROR » update templates/product.json:
Invalid settings object for block 'price'. Settings must be an object.
This is my file getting the error:
{
"sections": {
"main": {
"type": "main-product",
"blocks": {
"title": {
"type": "title",
"settings": {
}
},
"price": {
"type": "price",
"settings": [
]
},
...
As you can see, it doesn’t complain about the settings object for the title block.
Is this maybe some kind of backwards compatibility mode, for older schema definitions?
I know the Switch Themes Baseline theme I am currently work on, does not comply with all Shopify OS 2.0 requirements till now. Hence, this guess.
Edit:
Hi Liam,
I am afraid the documentation is either wrong, or the Dawn theme magically also does follow the wrong standards and works magically. 
This is the top of the current Dawn theme’s templates/product.json:
{
"sections": {
"main": {
"type": "main-product",
"blocks": {
"vendor": {
"type": "text",
"settings": {
"text": "{{ product.vendor }}",
"text_style": "uppercase"
}
},
"title": {
"type": "title"
},
"caption": {
"type": "text",
"settings": {
"text": "{{ product.metafields.descriptors.subtitle.value }}",
"text_style": "subtitle"
}
},
"price": {
"type": "price"
},
...
If this works, the documentation is plain wrong. Sorry.
And I also get the same behavior. Adding a setting in the “price” block settings, saving it updates it and the following get removes it again.
Here a screencast I have recorded with the dawn theme: https://streamable.com/hw9db1
Greets,
Andreas