Dlaczego ponownie rzucać wyjątki?

Wielokrotnie widziałem następujący kod:

try
{
    ... // some code
}
catch (Exception ex)
{
    ... // Do something
    throw new CustomException(ex);

    // or
    // throw;

    // or
    // throw ex;
}

Czy możesz wyjaśnić cel ponownego wprowadzenia wyjątku? Czy jest to zgodne z wzorcem / najlepszą praktyką w obsłudze wyjątków? (Czytałem gdzieś, że nazywa się to wzorzec „Informacje o dzwoniącym”?)