I suspect that you are joining catalog permissions by its inputs to its active directory groups? One way to make sure that you get all of the users on all of the databases, maybe not just ones in the active directory, would be to do a select statement on catalog_permissions(null, null), which will return all of the records for users that have special permissions set, and it already does this across all databases.
You could then do a left join to retain those records, joining to your base view over your active directory users by username (as opposed to username_in, which is input for the stored procedure). Users in the database that have special permissions but aren’t in the active directory will produce rows of null values for the columns that come from active directory, and every user in the active directory that exists in VDP will match to their username in the system.
Hope this helps!