Tahir, this might be a good place to dive into BuddyPress's internals.
The avatars in question are shown in places like http://commons.gc.cuny.edu/activity/. Filter by "Show Blog Comment" and you'll see that some items have a dummy avatar. (There is a related bug, which is that they read "commented on the blog post" - missing a subject.)
For avatars, start by filtering 'bp_get_activity_avatar'. Here's a framework:
function cac_anonymous_activity_avatar( $html, $params ) {
global $activities_template;
// We're only concerned with avatar requests where the object ID is empty.
if ( ! empty( $params['item_id'] ) ) {
return $html;
}
// We'll only have enough information to do the lookup if we're in an activity loop. Here's a clunky but effective way to check whether this is the case.
if ( empty( $activities_template->activity ) ) {
return $htmls;
}
// Then, use the $activity values to fetch the source comment, and get enough information about the commenter to look for an avatar.
// Then rebuild the $html using the new avatar URL
// It'll probably look something like this:
$activity = $activities_template->activity;
$blog_id = $activity->item_id;
$comment_id = $activity->secondary_item_id;
switch_to_blog( $blog_id );
$comment = get_comment( $comment_id );
// $comment should have enough info for you to assemble a Gravatar URL. See especially $comment->comment_author_email
restore_current_blog();
// then do something to rebuild the $html markup that must be returned from this callback
}
add_filter( 'bp_core_fetch_avatar', 'cac_anonymous_activity_avatar', 10, 2 );
This is pretty rough and untested, but it may be enough for you to get a feel for the WP filter system and some of the fundamentals of BP/WP's internals.