In the bowl of a stand mixer, combine 3 cups of flour and the yeast with a whisk. Set aside.
Pour the milk, sugar, and salt into a small saucepan, and heat over medium heat. Whisk gently and cook for about 3 minutes, until the sugar is dissolved and the temperature of the mixture is between 105°F and 115°F.
Pour the milk mixture into the stand mixer bowl with the flour mixture, and using the paddle attachment, mix on low speed for 3 minutes. Add the eggs, one at a time. Once everything is combined, change out the paddle attachment for the dough hook.
Pour in the remaining cup of flour, then begin mixing with the dough hook on medium speed. Add the butter, one piece at a time. Make sure each piece is completely blended before adding the next.
Lower the mixer speed, and continue kneading with the dough hook for six minutes, or until the dough comes away from the sides of the bowl cleanly. If the dough is too wet, add more flour, a tablespoon at a time. The dough is ready when you can press your finger into it and it springs back.
Empty the dough out of the bowl onto a lightly floured cutting board. Knead the dough with your hands for about 1 minute, just to make sure it’s soft and elastic. Form the dough into a ball and put it into a large greased bowl. Spray the top of the dough lightly with cooking spray. Cover the bowl with plastic wrap and refrigerate for 1 hour.