timezone - поле специфическое, для вывода списка часовых поясов используется целый класс core_date, а поле associated - простое, текстовое. Поэтому, даже если добавить в associated поле с поясами, то на странице регистрации новой учетки будет текстовая строка, куда новый пользователь может написать всё, что ему пожелается, хоть «Новые Васюки».
Вариант с установкой флага required (обязательное) в форме профиля пользователя (и любой другой) тоже не прокатит, потому что в отличие от поля, например, email, поле timezone не может быть пустым и выставляется автоматом (forcetimezone). Поэтому оно в любом случае уже будет заполнено и чтобы его изменить, пользователю все равно придется самому редактировать свой профиль.
Я, честно говоря, не понимаю, почему у вас такая проблема с timezone, это личное дело каждого пользователя, какой часовой пояс использовать. Он может быть в долгосрочной командировке где-то на Сев. полюсе, а жить и работать по Москве. )))
Остается только правка формы создания новой уч. записи (login/signup_form.php) с добавлением поля timezone, уже существующим пользователям всё равно придется пояса исправлять/устанавливать вручную. Добавьте в форму ниже поля «Страна» этот код:
if (isset($CFG->forcetimezone) and $CFG->forcetimezone != 99) {
$choices = core_date::get_list_of_timezones($CFG->forcetimezone);
$mform->addElement('static', 'forcedtimezone', get_string('timezone'), $choices[$CFG->forcetimezone]);
$mform->addElement('hidden', 'timezone');
$mform->setType('timezone', core_user::get_property_type('timezone'));
} else {
$choices = core_date::get_list_of_timezones($user->timezone, true);
$mform->addElement('select', 'timezone', get_string('timezone'), $choices);
$mform->addRule('timezone', get_string('required'), 'required', null, 'client');
}