@Shadow's answer above worked. Posting the answer for others visit later.
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(50) NOT NULL,
deleted_at VARCHAR(50) NULL,
CONSTRAINT UNIQUE INDEX `users_email_unique` ((CASE WHEN deleted_at IS NULL THEN email END))
);
This allowed me to reuse the email of soft-deleted record(with the same email and not null value in deleted_at), while explicitly blocking duplicated email usage with null value at deleted_at