Три очка:
1) Да, это то, что подразумевается под «динамическими языками» - то, что вы можете добавлять методы к классу во время выполнения, является общей особенностью динамических языков (например).
2) Вы отметили, что эта способность может привести к путанице во время выполнения. Сторонники динамических языков скажут, что преимущества этой функции превзошли все ее недостатки. Возможность метапрограммирования может быть очень мощной.
3) проверки времени компиляции могут все еще помочь в разработке с динамическими языками, если не более чем для проверки синтаксиса. Однако с динамическими языками вы теряете часть безопасности времени компиляции не динамических языков. Обратите внимание, что некоторые динамические языки интерпретируются (например, javascript), поэтому это своего рода спорный вопрос.