ClassLoader должен будет вызвать defineClass, чтобы получить Class. Согласно JavaDoc для defineClass:
Если имя не равно нулю, оно должно быть равно
в двоичное имя класса
определяется байтовым массивом.
Если имя пустое, оно будет получено из байт-кода. Таким образом, вы можете вернуть любой класс, который хотите, если он называется com.AClass. Другими словами, вы можете иметь несколько версий com.AClass. Вы даже можете использовать что-то вроде JavaAssist для создания класса на лету.
Но это не объясняет ClassNotFoundException - похоже, ваш загрузчик классов ничего не возвращает.