What is the use of After Validation Hook in Laravel 5

The point of the first method is just to keep everything contained inside of that Validator object to make it more reusable.

Yes, in your case it does the exact same thing. But imagine if you wanted to validate multiple items.

foreach ($inputs as $input) {
    $validator->setData($input);

    if ($validator->fails()) { ... }
}

In your case you will have to add that "if" check into the loop. Now imagine having to run this validation in many different places (multiple controllers, maybe a console script). Now you have this if statement in 3 different files, and next time you go to modify it you have 3x the amount of work, and maybe you forget to change it in one place...

I can't think of many use cases for this but that is the basic idea behind it.

By the way there is a validation rule called exists that will probably handle your emailExist() method

$rules = [
    'email' => 'exists:users,email',
];

http://laravel.com/docs/5.1/validation#rule-exists