diff --git a/conan/tools/cmake/__init__.py b/conan/tools/cmake/__init__.py
--- a/conan/tools/cmake/__init__.py
+++ b/conan/tools/cmake/__init__.py
@@ -1,5 +1,4 @@
 from conan.tools.cmake.toolchain import CMakeToolchain
-from conan.tools.cmake.toolchain import Block as CMakeToolchainBlock
 from conan.tools.cmake.cmake import CMake
 from conan.tools.cmake.cmakedeps.cmakedeps import CMakeDeps
 from conan.tools.cmake.file_api import CMakeFileAPI
diff --git a/conan/tools/cmake/toolchain.py b/conan/tools/cmake/toolchain.py
--- a/conan/tools/cmake/toolchain.py
+++ b/conan/tools/cmake/toolchain.py
@@ -654,6 +654,8 @@ def remove(self, name):
         del self._blocks[name]
 
     def __setitem__(self, name, block_type):
+        # Create a new class inheriting Block with the elements of the provided one
+        block_type = type('proxyUserBlock', (Block,), dict(block_type.__dict__))
         self._blocks[name] = block_type(self._conanfile, self._toolchain)
 
     def __getitem__(self, name):

diff --git a/conans/test/integration/toolchains/cmake/test_cmaketoolchain_blocks.py b/conans/test/integration/toolchains/cmake/test_cmaketoolchain_blocks.py
--- a/conans/test/integration/toolchains/cmake/test_cmaketoolchain_blocks.py
+++ b/conans/test/integration/toolchains/cmake/test_cmaketoolchain_blocks.py
@@ -8,12 +8,12 @@ def test_custom_block():
     c = TestClient()
     conanfile = textwrap.dedent("""
         from conans import ConanFile
-        from conan.tools.cmake import CMakeToolchain, CMakeToolchainBlock
+        from conan.tools.cmake import CMakeToolchain
         class Pkg(ConanFile):
             def generate(self):
                 toolchain = CMakeToolchain(self)
 
-                class MyBlock(CMakeToolchainBlock):
+                class MyBlock:
                     template = "Hello {{myvar}}!!!"
 
                     def context(self):
diff --git a/conans/test/unittests/tools/cmake/test_cmaketoolchain.py b/conans/test/unittests/tools/cmake/test_cmaketoolchain.py
--- a/conans/test/unittests/tools/cmake/test_cmaketoolchain.py
+++ b/conans/test/unittests/tools/cmake/test_cmaketoolchain.py
@@ -115,23 +115,6 @@ def context(self):
     assert 'CMAKE_BUILD_TYPE' in content
 
 
-def test_extend_block(conanfile):
-    toolchain = CMakeToolchain(conanfile)
-
-    class MyBlock(GenericSystemBlock):
-        template = "Hello {{build_type}}!!"
-
-        def context(self):
-            c = super(MyBlock, self).context()
-            c["build_type"] = c["build_type"] + "Super"
-            return c
-
-    toolchain.blocks["generic_system"] = MyBlock
-    content = toolchain.content
-    assert 'Hello ReleaseSuper!!' in content
-    assert 'CMAKE_BUILD_TYPE' not in content
-
-
 def test_user_toolchain(conanfile):
     toolchain = CMakeToolchain(conanfile)
     toolchain.blocks["user_toolchain"].user_toolchain = "myowntoolchain.cmake"

[feature] Improve custom CMakeToolchain blocks extension
From https://github.com/conan-io/docs/pull/2312, lets avoid the ``import CMakeToolchainBlock`` altogether, using Python dynamism.

conans/test/integration/toolchains/cmake/test_cmaketoolchain_blocks.py::test_custom_block
conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_fpic_when_shared_true[True] conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_replace_block conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_remove conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_no_fpic_when_not_an_option conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_osx_deployment_target conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_add_new_block conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_fpic_when_shared_true[False] conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_template_change conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_toolset conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_libcxx_abi_flag conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_fpic_enabled conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_template_remove conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_user_toolchain conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_context_replace conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_context_change conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_no_fpic_on_windows conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_cmake_toolchain conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_context_update conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_fpic_disabled conans/test/unittests/tools/cmake/test_cmaketoolchain.py::test_fpic_when_not_shared