Per-block settings in theme.json, and when they help

Settings can be scoped to a single block type, which is the only way to give one block a control the rest of the site does not have.

{
  "settings": {
    "color": { "custom": false },
    "blocks": {
      "core/button": {
        "color": { "palette": [ { "slug": "cta", "color": "#c9372c" } ] }
      },
      "core/separator": {
        "color": { "text": false, "background": false }
      }
    }
  }
}

Per-block settings merge with the top-level ones rather than replacing them, so the button gets the global palette plus its own entry — which is usually what is wanted and occasionally not. The useful cases are narrow: a call-to-action colour that must not appear elsewhere, and disabling controls on a block where they produce nothing sensible. Using this heavily produces a file where the effective settings for any block require reading two places, which is how it becomes unmaintainable.