Ну вроде как через HABTM это так просто не сделать. Точнее вообще не надо через него это делать. Тут просто вопрос идеологии — HABTM не поддерживает dependent: :destroy, он изначально проектировался так, чтобы не удалять какие-либо данные внутри самих коллекций, а удалять только связи между ними. Лучше сделайте связи через has_many through: с dependent: :destroy и оберните каждое удаление в catch блок. Возможно не самое элегантное решение, но работать будет) Либо же можно написать свой скоуп в котором уже осуществлять проверку есть ли данная заметка где-либо еще кроме как в этой группе.
PS пардон за сумбурное объяснение, надеюсь смысл донес. Если не понятно, ближе к вечеру смогу пример кода привести.