I got it to work on DNN 4.9.1 (in DNN 5 it works out of the box), I do not support this solution, since it's a bit of a hack so your on your own....
Disabeling the control from code does not solve the issue, but adding it dynamically if nobody is logged in does.
This means the control is not visible if you have logged in.
Add a script block at the top of your ASCX skin:
<script runat="server">
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As EventArgs) Handles Me.Init
'Add the Signin control to the page if not logged in.
If Not Request.IsAuthenticated Then
Dim oSignin As DotNetNuke.Modules.Admin.Authentication.Login
oSignin = LoadControl("~/Admin/Authentication/Login.ascx")
Dim oPlaceHolder As Control = Me.FindControl("SigninPlaceholder")
oPlaceHolder.Controls.Add(oSignin)
End If
End Sub
</script>
Then add this placeholder where you want the signin skin object to be in your skin:
<asp:PlaceHolder ID="SigninPlaceholder" runat="server"></asp:PlaceHolder>
And at a register at the top of the ASCX:
<%@ Register TagPrefix="dnn" TagName="SIGNIN" Src="~/Admin/Authentication/Login.ascx" %>