HYPOTHETICALLY SPEAKING
The way I would do it would be to have, say 10 Pidgey events. Choose a variable (say 0x7000 which should be set to 0x0) after each Pidgey battle use addvar to add one to the variable (0x7000). Have whoever completes the event (the person who sent you on the mission) check if you battled all ten (checkvar 0x7000 0xA) I imagine it wouldn't be as cut and paste as this but something generally similar.
Again this is all hypothetical, as I have yet to try it.
The thing with that though, is that you can't do it with random battles in the wild. You can only do it with scripts generating wild battles. So the only thing I can really think of with using scripting would be to, say, have an area where there are no wild Pidgeys, but other wild Pokemon, and insert a tile script over each patch of grass, etc.
Then each tile script would have to have a script to randomly generate a Pidgey. You could use flags or a variable (I'd recommend flags for this one, but that's just me - if you use a variable, just use one and set it to a different number each time).
I'd use the random command to give you random odds of Pidgey appearing or not. You'd also have to have checks, to see if the 8 Pidgey you wanted to have appeared, and put the setflags after the wildbattle commands, but even then you can't assure that the player didn't run away from the battle.