DOC: use substitution decorator for business month classes (#25828)
State: closed

- [X] closes #25828 
- [ ] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry


Validation script
`CustomBusinessMonthEnd`
```
################################################################################
########## Docstring (pandas.tseries.offsets.CustomBusinessMonthEnd)  ##########
################################################################################
                                                                                
DateOffset subclass representing one custom business month, incrementing        
between end of month dates.                                                     
                                                                                
Parameters                                                                      
----------                                                                      
n : int, default 1                                                              
normalize : bool, default False                                                 
    Normalize start/end dates to midnight before generating date range          
weekmask : str, Default 'Mon Tue Wed Thu Fri'                                   
    weekmask of valid business days, passed to ``numpy.busdaycalendar``         
holidays : list                                                                 
    list/array of dates to exclude from the set of valid business days,         
    passed to ``numpy.busdaycalendar``                                          
calendar : pd.HolidayCalendar or np.busdaycalendar                              
offset : timedelta, default timedelta(0)                                        
                                                                                
################################################################################
################################## Validation ##################################
################################################################################
                                                                                
9 Errors found:                                                                 
        Summary should fit in a single line                                     
        Parameter "n" has no description                                        
        Parameter "normalize" description should finish with "."                
        Parameter "weekmask" description should start with a capital letter     
        Parameter "weekmask" description should finish with "."                 
        Parameter "holidays" description should start with a capital letter     
        Parameter "holidays" description should finish with "."                 
        Parameter "calendar" has no description                                 
        Parameter "offset" has no description                                   
2 Warnings found:                                                               
        See Also section not found                                              
        No examples section found                                                                                                                   
```

`CustomBusinessMonthBegin`
```
################################################################################
######### Docstring (pandas.tseries.offsets.CustomBusinessMonthBegin)  #########
################################################################################
                                                                                
DateOffset subclass representing one custom business month, incrementing        
between beginning of month dates.                                               
                                                                                
Parameters                                                                      
----------                                                                      
n : int, default 1                                                              
normalize : bool, default False                                                 
    Normalize start/end dates to midnight before generating date range          
weekmask : str, Default 'Mon Tue Wed Thu Fri'                                   
    weekmask of valid business days, passed to ``numpy.busdaycalendar``         
holidays : list                                                                 
    list/array of dates to exclude from the set of valid business days,         
    passed to ``numpy.busdaycalendar``                                          
calendar : pd.HolidayCalendar or np.busdaycalendar                              
offset : timedelta, default timedelta(0)                                        
                                                                                
################################################################################
################################## Validation ##################################
################################################################################
                                                                                
9 Errors found:                                                                 
        Summary should fit in a single line                                     
        Parameter "n" has no description                                        
        Parameter "normalize" description should finish with "."                
        Parameter "weekmask" description should start with a capital letter     
        Parameter "weekmask" description should finish with "."                 
        Parameter "holidays" description should start with a capital letter     
        Parameter "holidays" description should finish with "."                 
        Parameter "calendar" has no description                                 
        Parameter "offset" has no description                                   
2 Warnings found:                                                               
        See Also section not found                                              
        No examples section found                                               
```

Labels:
name: Docs

Comments:
# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/25868?src=pr&el=h1) Report
> Merging [#25868](https://codecov.io/gh/pandas-dev/pandas/pull/25868?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/923ac2bdee409e4fa8c47414b07f52e036bb21bc?src=pr&el=desc) will **decrease** coverage by `<.01%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/25868/graphs/tree.svg?width=650&token=eZ4WkYLtcO&height=150&src=pr)](https://codecov.io/gh/pandas-dev/pandas/pull/25868?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #25868      +/-   ##
==========================================
- Coverage   91.48%   91.48%   -0.01%     
==========================================
  Files         175      175              
  Lines       52885    52885              
==========================================
- Hits        48381    48380       -1     
- Misses       4504     4505       +1
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.04% <100%> (ø)` | :arrow_up: |
| #single | `41.82% <100%> (ø)` | :arrow_up: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/25868?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/tseries/offsets.py](https://codecov.io/gh/pandas-dev/pandas/pull/25868/diff?src=pr&el=tree#diff-cGFuZGFzL3RzZXJpZXMvb2Zmc2V0cy5weQ==) | `96.69% <100%> (ø)` | :arrow_up: |
| [pandas/util/testing.py](https://codecov.io/gh/pandas-dev/pandas/pull/25868/diff?src=pr&el=tree#diff-cGFuZGFzL3V0aWwvdGVzdGluZy5weQ==) | `89.74% <0%> (-0.11%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/25868?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/25868?src=pr&el=footer). Last update [923ac2b...540e18e](https://codecov.io/gh/pandas-dev/pandas/pull/25868?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

@WillAyd I juste force pushed somes changes:
- Removed uneeded entry in whatsnew
- Fixed isort linting
- Fixed docstring validation. I picked some description elements from offsets.DateOffset & np.busdaycalendar
@Batalex just to clarify previous comment force pushing is less than desirable. Assuming you are rebasing which requires a force push an alternate workflow on top of your local branch is:

```sh
git fetch upstream
git merge upstream/master
```

Resolve any conflicts and `git merge --continue` if applicable. Should then be able to push without forcing
@WillAyd ping
Thanks @Batalex !
Thanks for your guidance!