At this time, once a custom attribute is created/set on a user (even if it is just one user) it will remain in the Carnival UI indefinitely, it cannot be removed. An attribute can currently only be updated or set on the SDK-level.
As a workaround, you would need to release an update to the SDK that changes format of the attribute value (e.g., "john smith" to "John Smith"). When your users update the app and launch it again, the attribute value will be updated.
This process, however, will take time to update all the users. Not all users will immediately update their app, so their device will still pass the incorrect or old attribute.
As a workaround, your users can be targeted in one of two Audience groups: those with the old attribute style and those with the new attribute. If you send to only one group, you miss the others, and vice versa.
To ensure both users are targeted, you would send to both types when trying to talk to a user. The Audience queries do support OR logic (e.g., firstName is john smith OR John Smith) so there's no chance for duplicates arriving on the device.
Do this for a while until new user_id group is >98% of users (for example) and then go forward with targeting on group.