A block style variation instead of a whole block

A block that differs from a core block only in appearance is a style variation, which is a class name and a stylesheet rule.

register_block_style( 'core/quote', array(
    'name'         => 'pull',
    'label'        => __( 'Pull quote', 'turkerdev' ),
    'inline_style' => '.is-style-pull { font-size: 1.5rem; }',
) );

// unregister one that ships with core
wp.blocks.unregisterBlockStyle( 'core/quote', 'large' );
// — this half is JavaScript, and must run after the
//   block is registered.

The variation adds an is-style-{name} class and nothing else, so it costs no build step, no save function and no deprecation when the styling changes. Unregistering the core variations is the other half and is JavaScript rather than PHP, which is an asymmetry that catches people. If the difference between two blocks is only visual, a variation is almost always the right answer and a custom block almost always is not.