In an odd stroke of luck, I found to my amusement that scan allows a blind player to scan. Objects/characters are handled properly, because they check against "can_see." Scan does not. Simple fix.
In skills.c, locate function do_scan:
void do_scan( CHAR_DATA * ch, char *argument )
short dir = -1;
short max_dist = 5;
Directly after that section, add the following:
if( IS_AFFECTED( ch, AFF_BLIND ) && ( !IS_AFFECTED( ch, AFF_TRUESIGHT ) ||
( !IS_NPC( ch ) && !IS_SET( ch->act, PLR_HOLYLIGHT ) ) ) )
send_to_char( "Everything looks the same when you're blind...\r\n", ch );
And there ya have it.