Implement ``custom_model_2d``

Since we have ``custom_model_1d``, is there any reason we can't have ``custom_model_2d``?